package main

import (
	"fmt"
	"log"
	"time"

	"github.com/mars/internal/admin/core/domain"
	"github.com/mars/internal/admin/core/infrastructure/wxcloud"
	"github.com/mars/internal/pkg/options"
)

func main() {
	// 配置微信云选项
	opts := &options.WxCloudOptions{
		AppId:     "your_app_id_here",
		AppSecret: "your_app_secret_here",
		EnvId:     "your_env_id_here",
	}

	// 创建微信云数据库工厂
	factory, err := wxcloud.GetWxCloudFactory(opts, nil)
	if err != nil {
		log.Fatalf("Failed to create wxcloud factory: %v", err)
	}

	// 获取用户数据库操作接口
	userGateway := factory.UserDomain()

	// 示例：创建新用户
	fmt.Println("=== 创建新用户 ===")
	newUser := &domain.User{
		OpenID:    "test_openid_123",
		NickName:  "测试用户",
		AvatarUrl: "https://example.com/avatar.jpg",
		Gender:    1,
		Country:   "中国",
		Province:  "北京",
		City:      "北京市",
		Role:      "normal",
		Status:    "active",
	}

	err = userGateway.CreateUser(newUser)
	if err != nil {
		log.Printf("创建用户失败: %v", err)
	} else {
		fmt.Printf("用户创建成功: %s\n", newUser.OpenID)
	}

	// 示例：查询用户
	fmt.Println("\n=== 查询用户 ===")
	user, err := userGateway.User("test_openid_123")
	if err != nil {
		log.Printf("查询用户失败: %v", err)
	} else {
		fmt.Printf("查询到用户: %+v\n", user)
	}

	// 示例：更新用户信息
	fmt.Println("\n=== 更新用户信息 ===")
	if user != nil {
		user.NickName = "更新后的用户名"
		user.City = "上海市"
		err = userGateway.UpdateUser(user.OpenID, user)
		if err != nil {
			log.Printf("更新用户失败: %v", err)
		} else {
			fmt.Printf("用户更新成功: %s\n", user.OpenID)
		}
	}

	// 示例：升级用户为VIP
	fmt.Println("\n=== 升级用户为VIP ===")
	vipInfo := &domain.VipInfo{
		Type:        "monthly",
		ActivatedAt: time.Now(),
		ExpiresAt:   &[]time.Time{time.Now().AddDate(0, 1, 0)}[0], // 一个月后过期
		OrderID:     "order_123456",
		IsActive:    true,
	}

	err = userGateway.UpdateUserVIP("test_openid_123", vipInfo)
	if err != nil {
		log.Printf("升级VIP失败: %v", err)
	} else {
		fmt.Printf("用户升级VIP成功\n")
	}

	// 示例：查询所有用户
	fmt.Println("\n=== 查询所有用户 ===")
	users, total, err := userGateway.Users()
	if err != nil {
		log.Printf("查询用户列表失败: %v", err)
	} else {
		fmt.Printf("查询到 %d 个用户，总数: %d\n", len(users), total)
		for i, u := range users {
			fmt.Printf("用户 %d: %s (%s)\n", i+1, u.NickName, u.OpenID)
		}
	}

	// 示例：查询VIP用户
	fmt.Println("\n=== 查询VIP用户 ===")
	vipUsers, err := userGateway.GetVIPUsers()
	if err != nil {
		log.Printf("查询VIP用户失败: %v", err)
	} else {
		fmt.Printf("查询到 %d 个VIP用户\n", len(vipUsers))
		for i, u := range vipUsers {
			fmt.Printf("VIP用户 %d: %s (%s)\n", i+1, u.NickName, u.OpenID)
		}
	}

	// 示例：查询活跃用户
	fmt.Println("\n=== 查询活跃用户 ===")
	activeUsers, err := userGateway.GetUsersByStatus("active")
	if err != nil {
		log.Printf("查询活跃用户失败: %v", err)
	} else {
		fmt.Printf("查询到 %d 个活跃用户\n", len(activeUsers))
	}

	// 示例：软删除用户
	fmt.Println("\n=== 删除用户 ===")
	err = userGateway.DeleteUser("test_openid_123")
	if err != nil {
		log.Printf("删除用户失败: %v", err)
	} else {
		fmt.Printf("用户删除成功\n")
	}

	// 示例：查询已删除用户
	fmt.Println("\n=== 查询已删除用户 ===")
	deletedUsers, err := userGateway.GetUsersByStatus("deleted")
	if err != nil {
		log.Printf("查询已删除用户失败: %v", err)
	} else {
		fmt.Printf("查询到 %d 个已删除用户\n", len(deletedUsers))
	}

	fmt.Println("\n=== 示例完成 ===")
}
